package com.serkol.config;


import lombok.SneakyThrows;
import org.springframework.data.redis.cache.RedisCache;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;

import java.time.Duration;

public class CustomRedisCacheManager extends RedisCacheManager {

    public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
        super(cacheWriter, defaultCacheConfiguration);
    }

    @SneakyThrows
    @Override
    protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfiguration){
        if(!name.isEmpty() && name.contains(":")){
            String[] spelStr = name.split(":");
            String key = spelStr[0];
            String valueStr = spelStr[1];
            int cycleTime = Integer.parseInt(valueStr.substring(0, 1));
            String cycleUnit = valueStr.substring(1, 2);

            if(cycleUnit.equals("D")){//表示天
                return super.createRedisCache(key, cacheConfiguration.entryTtl(Duration.ofDays(cycleTime)));
            }
            if(cycleUnit.equals("H")){//表示小时
                return super.createRedisCache(key, cacheConfiguration.entryTtl(Duration.ofHours(cycleTime)));
            }
            if(cycleUnit.equals("M")){//表示分钟
                return super.createRedisCache(key, cacheConfiguration.entryTtl(Duration.ofMinutes(cycleTime)));
            }
            if(cycleUnit.equals("S")){//表示秒
                return super.createRedisCache(key, cacheConfiguration.entryTtl(Duration.ofSeconds(cycleTime)));
            }else{
                throw new Exception("未识别的有效缓存时间单位");
            }
        }
        return super.createRedisCache(name, cacheConfiguration);

    }
}

